﻿using Kepp.Extend.Class;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kepp.Extend
{
    /// <summary>
    /// 存储
    /// </summary>
    public class container: import
    {
        //第一层
        public List<TitleClass> data = new List<TitleClass>();

        MyClass my = new MyClass();
        public sbyte value { get; set; }

        /// <summary>
        /// 初始化 目录
        /// </summary>
        public container()
        {
            data.Add(new TitleClass()
            {
                ID = 1,
                title = "基本控制练习",
                ps = "啃书不那么重要的话，什么是重要的呢？当然是做练习了！",
                Child = Class1()
            });
            data.Add(new TitleClass()
            {
                ID = 2,
                title = "C#递归小练习",
                ps = "啃书不那么重要的话，什么是重要的呢？当然是做练习了！",
                Child = Class2()
            });
            data.Add(new TitleClass()
            {
                ID = 3,
                title = "C#基本算法练习",
                ps = "啃书不那么重要的话，什么是重要的呢？当然是做练习了！",
                Child = Class3()
            });

            //
        }

        /// <summary>
        /// 基本控制练习
        /// </summary>
        public List<TitleClass> Class1()
        {
            List<TitleClass> todo =new List<TitleClass>();
            todo.Add(new TitleClass()
            {
                title = "九九乘法表",
                ps = "双重循环打印99乘法表！",
            });
            todo.Add(new TitleClass()
            {
                title = "菱形图案",
                ps="输入一个数字输出菱形图案"
            });
            todo.Add(new TitleClass()
            {
                title = "猜数字等小游戏",
                ps = "输入一个数字猜猜数字是多少"
            });
            todo.Add(new TitleClass()
            {
                title = "求质数",
                ps = "质数也成为素数，质数就是这个数除了1和他本身两个因数以外，没有其他因数的数，叫做质数，和他相反的是合数"
            });
            todo.Add(new TitleClass()
            {
                title = "有一列数1，1，2，3，5，........求第30个数",
            });
            todo.Add(new TitleClass()
            {
                title = "小青蛙跳台阶",
                ps = "一只青蛙一次可以跳上1级台阶，也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。"
            });
            return todo;
        }
        /// <summary>
        /// C#递归小练习
        /// </summary>
        public List<TitleClass> Class2()
        {
            List<TitleClass> todo = new List<TitleClass>();
            todo.Add(new TitleClass()
            {
                title = "赶鸭子",
                ps = "题目： 一个人赶着鸭子去每个村庄卖，每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子，问他出发时共赶多少只鸭子？经过每个村子卖出多少只鸭子？",
            });
            todo.Add(new TitleClass()
            {
                title = "角谷定理",
                ps= "输入一个自然数，若为偶数，则把它除以2，若为奇数，则把它乘以3加1。经过如此有限次运算后，总可以得到自然数值1。求经过多少次可得到自然数1"
            });

            return todo;
        }
        /// <summary>
        /// C#基本算法练习
        /// </summary>
        public List<TitleClass> Class3()
        {
            List<TitleClass> todo = new List<TitleClass>();
            todo.Add(new TitleClass()
            {
                title = "求和",
                ps = "1.计算两个整数的和，如果这两个数字相等，那么计算这两个数字和的三倍：",
            });
            todo.Add(new TitleClass()
            {
                title = "实现n和51的差的绝对值",
                ps = "写一个程序实现n和51的差的绝对值，如果n大于51那么请返回差的绝对值的三倍"
            });
            todo.Add(new TitleClass()
            {
                title = "来检查两个整数",
                ps = "写一个程序程序来检查两个整数中的任意一个是否等于30或者他们的和等于30"
            });
            todo.Add(new TitleClass()
            {
                title = "检验OK开头",
                ps = "写一个程序来实现把OK作为一个给定字符串的前缀来返回，如果原来的字符串是OK开头的，那么返回原来的字符串"
            });
            todo.Add(new TitleClass()
            {
                title = "删除指定字符串位置",
                ps = "写一个程序实现删除一个字符串给定位置的字符，给定位置的索引会在0-元素数-1之间。"
            });

            return todo;
        }
        /// <summary>
        /// 开始
        /// </summary>
        /// <returns></returns>
        public container Stop()
        {
            Console.WriteLine("-------------语法练习小程序-------------");
            Console.WriteLine("操作说明：\n99返回上一级");
            this.data.ForEach(x => Console.WriteLine($"{this.data.IndexOf(x) + 1}.{x.title}"));
            this.value = this.Sbyte();
            if (this.value == 99)
            {
                Console.WriteLine("程序即将关闭");
                return this;
            }
            if (this.value - 1 >= this.data.Count())
            {
                Console.WriteLine($"没有该题目");
                return this.Stop();
            }
            this.Stop2();
            return this.Stop();
        }

        /// <summary>
        /// 第二层
        /// </summary>
        /// <returns></returns>
        public container Stop2() 
        {
            this.data[this.value-1].Output();
            var number = this.Sbyte();
            if (number == 99)
            {
                Console.WriteLine("返回上一级");
                return this;
            }
            if (number-1>= this.data[this.value - 1].Child.Count())
            {
                Console.WriteLine($"没有该题目");
                return this.Stop2();
            }
            this.data[this.value - 1].Child[number - 1].Res();
            my.callFunc("fun" + this.value + "_" + number);
            return this.Stop2();
        }
    }
}
